package br.com.condominio.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@SequenceGenerator(name = "comunicado_comuni_codigo_seq", sequenceName = "comunicado_comuni_codigo_seq", allocationSize = 1)
public class Comunicado implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Integer comuniCodigo;
	private ComunicadoTipo comunicadoTipo;
	private Usuario usuario;
	private String comuniDescricao;
	private String comuniTitulo;
	private Date comuniDataInicio;
	private Date comuniDataFim;

	public Comunicado() {
	}

	public Comunicado(Integer comuniCodigo, ComunicadoTipo comunicadoTipo,
			Usuario usuario, Date comuniDataInicio, Date comuniDataFim) {
		this.comuniCodigo = comuniCodigo;
		this.comunicadoTipo = comunicadoTipo;
		this.usuario = usuario;
		this.comuniDataInicio = comuniDataInicio;
		this.comuniDataFim = comuniDataFim;
	}

	public Comunicado(Integer comuniCodigo, ComunicadoTipo comunicadoTipo,
			Usuario usuario, String comuniDescricao, String comuniTitulo,
			Date comuniDataInicio, Date comuniDataFim) {
		this.comuniCodigo = comuniCodigo;
		this.comunicadoTipo = comunicadoTipo;
		this.usuario = usuario;
		this.comuniDescricao = comuniDescricao;
		this.comuniTitulo = comuniTitulo;
		this.comuniDataInicio = comuniDataInicio;
		this.comuniDataFim = comuniDataFim;
	}

	@Id
	@Column(name = "comuni_codigo", unique = true, nullable = false, precision = 131089, scale = 0)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "comunicado_comuni_codigo_seq")
	public Integer getComuniCodigo() {
		return this.comuniCodigo;
	}

	public void setComuniCodigo(Integer comuniCodigo) {
		this.comuniCodigo = comuniCodigo;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "comutipo_codigo", nullable = false)
	public ComunicadoTipo getComunicadoTipo() {
		if(this.comunicadoTipo == null)
			this.comunicadoTipo = new ComunicadoTipo();
		return this.comunicadoTipo;
	}

	public void setComunicadoTipo(ComunicadoTipo comunicadoTipo) {
		this.comunicadoTipo = comunicadoTipo;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "use_login", nullable = false)
	public Usuario getUsuario() {
		if(this.usuario == null)
			this.usuario = new Usuario();
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@Column(name = "comuni_descricao")
	public String getComuniDescricao() {
		return this.comuniDescricao;
	}

	public void setComuniDescricao(String comuniDescricao) {
		this.comuniDescricao = comuniDescricao;
	}

	@Column(name = "comuni_titulo")
	public String getComuniTitulo() {
		return this.comuniTitulo;
	}

	public void setComuniTitulo(String comuniTitulo) {
		this.comuniTitulo = comuniTitulo;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "comuni_data_inicio", nullable = false, length = 29)
	public Date getComuniDataInicio() {
		return this.comuniDataInicio;
	}

	public void setComuniDataInicio(Date comuniDataInicio) {
		this.comuniDataInicio = comuniDataInicio;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "comuni_data_fim", nullable = false, length = 29)
	public Date getComuniDataFim() {
		return this.comuniDataFim;
	}

	public void setComuniDataFim(Date comuniDataFim) {
		this.comuniDataFim = comuniDataFim;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((comuniCodigo == null) ? 0 : comuniCodigo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Comunicado other = (Comunicado) obj;
		if (comuniCodigo == null) {
			if (other.comuniCodigo != null)
				return false;
		} else if (!comuniCodigo.equals(other.comuniCodigo))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Comunicado [comuniCodigo=" + comuniCodigo + ", comunicadoTipo="
				+ comunicadoTipo + ", usuario=" + usuario
				+ ", comuniDescricao=" + comuniDescricao + ", comuniTitulo="
				+ comuniTitulo + ", comuniDataInicio=" + comuniDataInicio
				+ ", comuniDataFim=" + comuniDataFim + "]";
	}
	
	

}
